package com.wskj.workbench.service;

import com.wskj.common.core.domain.AjaxResult;
import com.wskj.common.core.domain.entity.SysUser;
import com.wskj.common.core.mybatisplus.core.IServicePlus;
import com.wskj.workbench.param.MetaInfoParam;
import com.wskj.workbench.param.RealNameParam;
import com.wskj.workbench.vo.app.AppUserLoginVo;
import com.wskj.workbench.vo.app.AppWxLoginVo;
import com.wskj.workbench.bo.app.AppUserBindWxOrAliBo;
import com.wskj.workbench.bo.app.AppUserInfoEditBo;
import com.wskj.workbench.bo.app.AppUserRegisterBo;

/**
 * 用户 业务层
 *
 * @author ruoyi
 */
public interface ISysUserExtendService extends IServicePlus<SysUser> {

    /**
     * 登录
     * @param userName 登录账号
     * @param password 登录密码
     * @return
     */
    AjaxResult login(String phoneNumber, String password);

    /**
     * 验证码登录
     *
     * @param phoneNumber 手机号
     * @param veryCode    验证码
     * @return
     */
    AjaxResult smsLogin(String phoneNumber, String veryCode);

    /**
     * APP快捷登录
     * @param uid 唯一标识
     * @param loginType 登录类型
     * @return
     */
    AjaxResult quickLogin(String uid,String loginType);

    /**
     * 小程序授权登录
     * @param code 微信code
     * @param nickName 昵称
     * @param headImage 头像
     * @return
     */
    AjaxResult appletLogin(String code,String nickName,String headImage);

    /**
     * 微信小程序登录
     * @param code
     * @return
     */
    AjaxResult<AppWxLoginVo> wxLogin(String code);

    /**
     * 通过微信code获取手机号
     * @param code
     * @return
     */
    AjaxResult<String> getWxPhoneNumber(String code);

    /**
     * 注册或更新用户信息
     *
     * @param appUserInfoEditBo 用户信息
     * @return 用户信息
     */
    AjaxResult<AppUserLoginVo> wxRegister(AppUserInfoEditBo appUserInfoEditBo);

    /**
     * 微信APP登录
     * @param wxOpenId
     * @param accessToken
     * @return
     */
    AjaxResult<AppUserLoginVo> wxAppLogin(String wxOpenId, String accessToken);

    /**
     * 绑定手机号
     *
     * @param phoneNumber 手机号
     * @param veryCode  验证码
     * @param wxOpenId 微信openid
     * @param accessToken accessToken
     * @return
     */
    AjaxResult<AppUserLoginVo> wxBindMobile(String phoneNumber, String veryCode, String wxOpenId, String accessToken);

    /**
     * 重置密码
     * @param resetType 重置方式 1=短信 2=密码
     * @param type 类型 1:登录密码 2:支付密码
     * @param originalPassword 原密码
     * @param newPassword 新密码
     * @return
     */
    AjaxResult resetPassword(Integer resetType,Integer type,String originalPassword,String newPassword);

    /**
     * 忘记密码
     * @param phoneNumber 手机号
     * @param veryCode 验证码
     * @param newPassword 新密码
     * @return
     */
    AjaxResult forgetPassword(String phoneNumber,String veryCode,String newPassword);

    /**
     * 获取手机验证码
     * @param phoneNumber 手机号
     * @param veryType 1:注册 2:忘记密码 3:修改手机号
     * @param userType 登录用户类型 01:普通用户
     * @return
     */
    AjaxResult veryCode(String phoneNumber,String veryType, String userType);

    /**
     * 苹果绑定手机号
     * @param newUserName 新账号
     * @param veryCode 验证码
     * @param password 登录密码
     * @return
     */
    AjaxResult bindPhoneNumber(String newUserName,String veryCode,String password);

    /**
     * 新账号
     * @param newUserName 新账号
     * @param veryCode 验证码
     * @return
     */
    AjaxResult bindNewPhoneNumber(String newUserName,String veryCode);


    /**
     * 提现绑定微信或者支付宝
     * @param appUserBindWxOrAliVo
     * @return
     */
    AjaxResult withdrawalBind(AppUserBindWxOrAliBo appUserBindWxOrAliVo);

    /**
     * 获取认证信息
     * @param metaInfoParam
     * @return
     */
    String getCertifyId(MetaInfoParam metaInfoParam);

    /**
     * 实名认证
     * @param realNameParam
     * @return
     */
    int realAuth(RealNameParam realNameParam);

    /**
     * 调用verifyMobile完成本机号码校验认证
     * @param accessCode  App端SDK获取AccessCode参数值，即Token。必填
     * @param phoneNumber 手机号，必填
     **/
    AjaxResult aliVerifyMobile(String accessCode, String phoneNumber);

    /**
     * 阿里云一键登录取号
     *
     * @param accessToken APP端SDK获取的登录token，必填
     **/
    AjaxResult aliGetMobile(String accessToken);

    /**
     * 支付宝授权登录
     * @param code
     * @return
     */
    AjaxResult aliPayLogin(String code);
}
